package com.it.schoolhomeos.entity;

import com.it.schoolhomeos.enums.Role;
import jakarta.persistence.*;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
import org.hibernate.annotations.Comment;

/**
 * 用户实体类
 * 
 * 用于存储系统中所有用户的基本信息，包括管理员、教师和家长
 * 通过role字段区分不同类型的用户
 */
@Data
@Getter
@Setter
@Entity
@Table(name = "user")
@Comment("用户表")
public class User {
    
    /**
     * 用户ID，主键，自增
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", columnDefinition = "BIGINT COMMENT '用户ID，主键，自增'")
    private Long id;
    
    /**
     * 用户名，唯一，用于登录系统
     */
    @Column(name = "username", nullable = false, unique = true, columnDefinition = "VARCHAR(50) COMMENT '用户名，唯一'")
    private String username;
    
    /**
     * 密码，存储加密后的密码
     */
    @Column(name = "password", nullable = false, columnDefinition = "VARCHAR(100) COMMENT '密码，加密存储'")
    private String password;
    
    /**
     * 用户真实姓名
     */
    @Column(name = "name", nullable = false, columnDefinition = "VARCHAR(50) COMMENT '姓名'")
    private String name;
    
    /**
     * 联系电话
     */
    @Column(name = "phone", columnDefinition = "VARCHAR(20) COMMENT '联系电话'")
    private String phone;
    
    /**
     * 电子邮箱
     */
    @Column(name = "email", columnDefinition = "VARCHAR(100) COMMENT '电子邮箱'")
    private String email;
    
    /**
     * 用户头像URL
     */
    private String avatar;
    
    /**
     * 用户角色，可选值：ADMIN(管理员)、TEACHER(教师)、PARENT(家长)
     */
    @Enumerated(EnumType.STRING)
    @Column(name = "role", nullable = false, columnDefinition = "VARCHAR(20) COMMENT '角色：ADMIN-管理员，TEACHER-教师，PARENT-家长'")
    private Role role;
    
    /**
     * 账号是否启用，true表示启用，false表示禁用
     */
    @Column(name = "enabled", nullable = false, columnDefinition = "BOOLEAN DEFAULT true COMMENT '是否启用：true-启用，false-禁用'")
    private Boolean enabled = true;
    
    /**
     * 创建时间
     */
    @Column(name = "create_time", nullable = false, columnDefinition = "DATETIME COMMENT '创建时间'")
    private LocalDateTime createTime;
    
    /**
     * 更新时间
     */
    @Column(name = "update_time", columnDefinition = "DATETIME COMMENT '更新时间'")
    private LocalDateTime updateTime;
} 